#ifndef DATACENTER_H
#define DATACENTER_H

#include <QObject>
#include <QList>

#include "data.h"
#include "../network/netClient.h"

namespace model{
    class datacenter : public QObject
    {
        Q_OBJECT
    public:
        static datacenter* getInstance();
        ~datacenter();

    private:
        datacenter();
        datacenter(const datacenter&) = delete;
        datacenter& operator= (const datacenter&) = delete;
        static datacenter* instance;

    private:
        // 需要组织管理的所有数据

        // 当前客户端登录到服务器的会话id
        QString loginSessionId = "";

        // 当前用户信息
        UserInfo* myself = nullptr;

        // 好友列表
        QList<UserInfo>* friendList = nullptr;

        // 会话列表
        QList<ChatSessionInfo>* chatSessionInfoList = nullptr;

        // 记录当前会话是哪个会话
        QString currentChatSessionId = "";

        // 记录会话中都有哪些成员，主要是群聊天，key:ChatSessionId,value:QList<UserInfo>
        QHash<QString, QList<UserInfo>>* memberList = nullptr;

        // 待处理的好友申请列表
        QList<UserInfo>* applyList = nullptr;

        // 每个会话的最近消息列表,key:ChatSessionId,value:QList<Message>
        QHash<QString,QList<Message>>* recentMessages = nullptr;

        // 存储每个会话未读消息的个数,key:ChatSessionId,value:int
        QHash<QString,int>* unreadMessagesCount = nullptr;

        // 用户的好友搜索结果
        QList<UserInfo>* searchFriendResult = nullptr;

        // 短信验证码的验证Id
        QString currentVerifyCode = "";

        // 让datacenter持有NetClient实例
        network::NetClient netClient;

    public:
        // 初始化数据文件
        void initDataFile();
        // 存储数据到文件中
        void saveDataFile();
        // 从数据文件中加载数据内存
        void loadDataFile();
    signals:
    };
}
// end namespace

#endif // DATACENTER_H
